#include "ros/ros.h"


/*
    需求：演示时间相关的API
    实现：1， 准备工作（头文件，ros节点初始化， 创建句柄
         2， 获取当前时刻；
         3，设置指定时刻
    
    需求2：程序执行中停顿5秒
    实现： 
        1，创建持续时间对象
        2，执行休眠操作

    需求3：已知程序开始时刻，和程序运行时间，秋程序结束时刻
    实现：
        1，获取程序开始时刻
        2，模拟程序运行深刻
        3，计算结束时刻（时刻可减，不可加）；
        4，时刻和时间可加（加完为时间）

    需求4：每个一秒钟，发送一段文本
    实现：
        1， rate.sleep();
        2,使用定时器
*/

void cb(const ros::TimerEvent& event)
{
    static int count=0;
    count++;
    ROS_INFO("------------ %d", count);
    ROS_INFO("当前时刻 %.2f", event.current_real.toSec());
}


int main(int argc, char** argv)
{
    setlocale(LC_ALL, "");
    ros::init(argc, argv, "hello_time");
    ros::NodeHandle nh;

    //获取当前时刻， now（）函数，将执行该api的那一刻的时刻， 
    //参考系：1970.01.01.00：00：00；
    ros::Time right_now=ros::Time::now();
    ROS_INFO("当前时刻： %2f", right_now.toSec());
    ROS_INFO("当前时刻 ： %d", right_now.sec);
    //设置指定时刻；
    ros::Time t1(20, 3124000000);
    ros::Time t2(100.36);
    ROS_INFO("T1= %2f", t2.toSec());
    //持续时间——————————————————————————————————————————//
    ros::Time start=ros::Time::now();
    ROS_INFO("开始休眠 %2f", start.toSec());
    ros::Duration du(4.5);
    du.sleep();
    ros::Time end=ros::Time::now();
    ROS_INFO("休眠结束 %2f", end.toSec());
    ROS_INFO("预计休眠结束 %2f",(start+du).toSec());
    ROS_INFO("花费时间 %2f", (end-start).toSec());

    ros::Duration du1(3.0);
    ROS_INFO("时间相加 %2f", (du+du1).toSec());
    ROS_INFO("时间相减 %2f", (du-du1).toSec());
//——————————————————————————————————————————————————————————————
/*r – The rate at which to call the callback  //时间间隔
callback – The method to call                 //回调函数
obj – The object to call the method on        
oneshot – If true, this timer will only fire once    //是否一次性
autostart – If true (default), return timer that is already started   //自动启动
*/

    ros::Timer time= nh.createTimer(ros::Duration(1), cb, false, false);
    time.start();
    ros::spin();

    return 0;
}